istio gateway
在 istio 中扮演很重要的角色,如果沒有這東西,就沒有辦法讓外部流量導進來。
雖然說可以透過 service nodeport的模式,掛上 domain 處理。但比較好的方式,假設都是 web 服務的話,其實對外都是 80 or 443 port,這樣如果服務一多,就沒辦法都用同一個 port ,在原生 k8s 模式下有一個叫做 ingress 的東西可以處理這件事情,筆者碰 k8s 沒多久,就直接上 istio 模式了,所以就略過不介紹了,有興去了解的還是可以去參考官網文件。
這間稍微簡單介紹一下 istio gateway ,他本身提供 L4 到 L6 的功能,所以 TLS... 等等相關它都辦得到,那一定會有人問 L7 呢? 在 istio 裡面它提供了一個叫 virtualservice
這東西就有了 L7 route rule 的功能,gateway 可以綁定一個 virtualservice
,今天先不談 virtualservice
,我們先試試 gateway
吧
首先大家先
$ kubectl get service -n istio-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
istiod ClusterIP 10.43.24.239 <none> 15010/TCP,15012/TCP,443/TCP,15014/TCP,853/TCP 3d1h
istio-egressgateway ClusterIP 10.43.60.110 <none> 80/TCP,443/TCP,15443/TCP 3d1h
istio-ingressgateway LoadBalancer 10.43.189.193 <pending> 15021:32461/TCP,80:32046/TCP,443:30536/TCP,31400:31695/TCP,15443:32082/TCP 3d1h
grafana ClusterIP 10.43.128.204 <none> 3000/TCP 5m41s
上面可以看到istio-ingressgateway
,這是 istio 安裝 demo profile後,預設就安裝完的 service 或是我把它稱作 gateway 代理,請大家記得這個名稱。
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
name: istio-ingressgateway #這裡就是填入上面所查到的 istio-ingressgateway,實務上如果你有多個 ip ,就會有多個 gateway 代理,然後就要描述多個 gateway 去使用 gateway 代理
spec:
selector:
istio: first-gateway #對應virtualservice spec.gateways
servers:
- port: #加密傳輸
number: 443
name: https
protocol: HTTPS
tls:
mode: SIMPLE
serverCertificate: /etc/istio/ingressgateway-certs/tls.crt #設定憑證路徑
privateKey: /etc/istio/ingressgateway-certs/tls.key #設定憑證路徑
hosts:
- "*" #該服務對應domain
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*" #該服務對應domain
這樣把它部署到 istio-system
, 就完成了 gateway 佈置。